package io.renren.modules.sys.controller;


import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import io.renren.common.utils.R;

import io.renren.entity.FileManagerEntity;
import org.springframework.util.Assert;
import io.renren.modules.sys.service.FileManagerService;
import io.renren.modules.sys.service.impl.FilePathServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ClassUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import static io.renren.common.utils.Constant.REAL_FILE_PATH;

/**
* @Description:    文件操作
* @Author:         zyj
* @CreateDate:     2019/1/2 11:53
* @UpdateUser:     zyj
* @UpdateDate:     2019/1/2 11:53
* @UpdateRemark:   修改内容
* @Version:        1.0
*/

@RestController
@RequestMapping("sys/file")
public class FileController {

    @Autowired
    private FileManagerService fileManagerService;
    //private String urlHead = "http://localhost:28088/renren-fast/file/";
    private String urlHead = "http://47.98.49.100:28081/renren-fast/file/";
    //url="http://你自己的域名/项目名/images/"+fileName;//正式项目


    @RequestMapping(value = "/uploadFile", produces = "application/json;charset=UTF-8")
    public R uploadFile(@RequestParam("file") MultipartFile file,
                        String recordId,
                        String attachType,
                        String remark,
                        String remarkEnglish,
                        HttpServletRequest request) {
        Assert.hasText(recordId, "关联主键id不能为空");
        Assert.hasText(attachType, "文件分类不能为空");

        //判断文件是否为空
        if (file.isEmpty()) {
            return R.error("上传文件不可为空");
        }
        // 获取文件名
        String realFileName = file.getOriginalFilename();
        String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + realFileName;
        //加个时间戳，尽量避免文件名称重复
        String path = REAL_FILE_PATH + fileName;
        //String path = "C:/file/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + fileName;
        //文件绝对路径
        //System.out.print("保存文件绝对路径"+path+"\n");
        //创建文件路径
        File dest = new File(path);
        //判断文件是否已经存在
        if (dest.exists()) {
            return R.error("文件已经存在");
        }
        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }

        String url = "";
        try {
            FileManagerEntity fileManagerEntity = new FileManagerEntity();
            //上传文件
            file.transferTo(dest); //保存文件
            //System.out.print("保存文件路径"+path+"\n");
            url = urlHead + fileName;//本地运行项目
            fileManagerEntity.setRecordId(recordId);
            fileManagerEntity.setAttachType(attachType);
            fileManagerEntity.setAttachPath(path);
            fileManagerEntity.setRealFileName(realFileName);
            fileManagerEntity.setUrl(url);
            fileManagerEntity.setCreateTime(new Date());
            fileManagerEntity.setCreateUser(request.getAttribute("userId").toString());
            fileManagerEntity.setRemark(remark);
            fileManagerEntity.setRemarkEnglish(remarkEnglish);
            //路径等数据存入数据库file_manager表
            fileManagerService.insert(fileManagerEntity);
            System.out.print("保存的完整url====" + url + "\n");
        } catch (IOException e) {
            return R.error("上传失败");
        }
        return R.ok(url);
    }


    /**
     * 删除服务上的文件
     * @param params 文件
     * @return
     * @author zyj
     * @date 2019年1月8日 上午1:06:48
     */
    @RequestMapping(value = "/deleteFile", produces = "application/json;charset=UTF-8")
    public R deleteFile(@RequestBody JSONObject params) {
        Assert.isTrue(params!=null && params.containsKey("fileName"), "文件名不能为空");
        Boolean b = deleteServerFile(params.getString("fileName"));
        FileManagerEntity fileManagerEntity = new FileManagerEntity();
        fileManagerEntity.setDeleted(true);
        fileManagerService.update(fileManagerEntity,new EntityWrapper<FileManagerEntity>().eq("attach_path",REAL_FILE_PATH+params.getString("fileName")));
        if(b){
            return R.ok();
        }else{
            return R.error("文件不存在");
        }
    }


    /**
     * 删除服务上的文件
     * @param fileName 文件名
     * @return
     * @author zyj
     * @date 2019年1月8日 上午1:06:48
     */
    public static boolean deleteServerFile(String fileName) {
        boolean delete_flag = false;
        File file = new File(REAL_FILE_PATH + fileName);
        if (file.exists() && file.isFile() && file.delete())
            delete_flag = true;
        else
            delete_flag = false;
        return delete_flag;
    }
}




    

